package interfaccia;

import java.awt.event.ActionEvent;
import java.io.File;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import sistema.Salvataggio;

import fsmCore.ClasseEquivalenza;
import fsmCore.Macchina;

public class MainMenu extends Menu {

	
	private static final long serialVersionUID = 1L;
	private static final String[] VOCI = { "Gestione Macchina 1" ,"Gestione Macchina 2", "Gestione Classi Equivalenza","Simulazione","Elimina Progetto","Salva Progetto" };
	private static final String TITOLO = "Main Menu";
	
	private Vector<ClasseEquivalenza> classiEq;
	
	private Macchina fsm[];
	
	public MainMenu(Vector<ClasseEquivalenza> _classiEq, Macchina[] _fsm) {
		super(TITOLO,VOCI);
		super.getFinestra().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		classiEq=_classiEq;
		fsm=_fsm;
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		Object click =e.getSource();
		if (click == super.getPulsanti()[0]){
			MenuGestioneMacchina m = new MenuGestioneMacchina(fsm[0],classiEq); 
			m.visualizzaFinestra();
			
		}
		else if(click == super.getPulsanti()[1]){
			MenuGestioneMacchina m = new MenuGestioneMacchina(fsm[1],classiEq); 
			m.visualizzaFinestra();
		
		}
		else if(click == super.getPulsanti()[2]){
			MenuGestioneClassiEq m = new MenuGestioneClassiEq(classiEq, fsm);
			m.visualizzaFinestra();
			
		}
		else if(click == super.getPulsanti()[3]){
			
			if(fsm[0].getStatoIniziale()!=null&&fsm[1].getStatoIniziale()!=null){
				VisualizzaSimulazione s= new VisualizzaSimulazione(fsm);
				s.showSimulazione();
			}
			else
				JOptionPane.showMessageDialog(null, "Impossibile avviare la simulazione,\naggiungi almeno lo stato iniziale in ogni macchina");
		}
		else if(click == super.getPulsanti()[4]){
			fsm[0].eliminaMacchina();
			fsm[1].eliminaMacchina();
			classiEq.removeAllElements();
			classiEq.add(new ClasseEquivalenza("Default", 1));//aggiunge la classe di default
			JOptionPane.showMessageDialog(null, "L'intero progetto e' stato eliminato");
		}
		else if(click == super.getPulsanti()[5]){
			File dirSalvataggi= new File("salvataggi");
			if(!dirSalvataggi.exists()){
				dirSalvataggi.mkdir();
			}
			
			File fileMacchina1= new File("salvataggi/macchina1.fsm");
			File fileMacchina2= new File("salvataggi/macchina2.fsm");
			File fileClassiEQ= new File("salvataggi/classiEQ.fsm");
			boolean m1,m2,cEq; 
			m1=Salvataggio.salvaOggetto(fileMacchina1, fsm[0]);
			m2=Salvataggio.salvaOggetto(fileMacchina2, fsm[1]);
			cEq=Salvataggio.salvaOggetto(fileClassiEQ, classiEq);
			if(m1&&m2&&cEq)
				JOptionPane.showMessageDialog(null, "Salvataggio completato con successo");
			else
				JOptionPane.showMessageDialog(null, "Impossibile salvare");
			
		}
	}


	public Macchina[] getFsm() {
		return fsm;
	}

	public void setFsm(Macchina[] fsm) {
		this.fsm = fsm;
	}
	
}
